package com.stx.demo1011;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

//将字节还原成对象——反序列化
//把对象拍扁成字节——序列化
//对象 → 字节：像把乐高城堡拆成零件装进盒子（序列化）
//        字节 → 对象：再把零件拿出来重新拼成城堡（反序列化）
public class 序列化 {
//    反序列化漏洞 = “把外面传进来的字节流，直接还原成对象时没做安检” → 攻击者塞进恶意数据，服务器一还原就执行任意代码（RCE）。
//    一句话记忆：
//            “字节流里夹带私货，程序一复活就爆炸。”

    public static void main(String[] args) {
        User user = new User("xiaoming", 18, "nan");
        //序列化操作--保存到文件里
        try {
            //创建一个文件，将后续序列化的文件保存到里面
            FileOutputStream file = new FileOutputStream("D:\\git_homework\\4-6-parts\\task\\README.md");
            //创建序列化工具，将对象user保存到文件里
            ObjectOutputStream oos=new ObjectOutputStream(file);
            //开始序列化操作
            oos.writeObject(user);
        }
        catch (FileNotFoundException e) {
            System.out.println("找不到文件");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
//        catch(Exception e ){
//            e.printStackTrace();打印栈的踪迹
//        }
    }
}
////    JSON 与 XML 都是**“纯文本、跨语言、跨平台”**的数据交换格式，
// 作用相同：把结构化数据序列化成字符串，方便存储/传输/解析。
//json格式
// user:{
//name:"nihao",
//age:18}键值对形式存储

//xml格式：<encoding="utf-8">
//<name>nihao</name>
//<age>18</age>

//class User{
//    private String name;
//    private int age;
//    private String sex;
//
//    public User(String name, int age, String sex) {
//        this.name = name;
//        this.age = age;
//        this.sex = sex;
//    }
//
//    @Override
//    public String toString() {
//        return "User{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                ", sex='" + sex + '\'' +
//                '}';
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//}